package com.king.designpatterns.结构型模式.外观模式;

/**
 * 外观模式（Facade Pattern）也叫门面模式，是一种比较常用也非常简单的设计模式。
 *
 * 定义：要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口，使得子系统更易使用。
 *
 * 角色：
 *      ■ 外观（Facade）角色：
 *          客户端可以调用该角色的方法，该角色知晓相关子系统的功能和责任。
 *          正常情况下，本角色会将所有从客户端发来的请求委派到相应的子系统，即该角色没有实际的业务逻辑，只是一个委托类。
 *      ■ 子系统（Subsystem）角色：
 *          可以同时有一个或多个子系统，每一个子系统都不是一个单独的类，而是一个类的集合。
 *          子系统不知道外观角色的存在，对于子系统而言，外观角色仅仅是另外一个客户端而已。
 *
 * 优点：
 *      ■ 减少系统的相互依赖，所有的依赖都是对Façade对象的依赖，与子系统无关。
 *      ■ 提高灵活性，不管子系统内部如何变化，只要不影响Facade对象，任何活动都是自由的。
 *      ■ 提高安全性，Facade中未提供的方法，外界就无法访问，提高系统的安全性。
 *
 * 场景：
 *      ■ 为一个复杂的模块或子系统提供一个供外界访问的接口。
 *      ■ 子系统相对独立，外界对子系统的访问只要黑箱操作即可。
 *      ■ 预防风险扩散，使用Façade进行访问操作控制。
 *
 * @author king
 * @date 2021-06-08 14:13
 */
public class FacadePattern {
    public static void main(String[] args) {
        Secretary secretary = new Secretary();
        System.out.println("老板告诉秘书要到上海出差10天");
        secretary.trip("上海", 10);
        System.out.println("-------------------------");
        System.out.println("老板搞伤秘书要请8个人吃饭");
        secretary.repast(8);
    }
}
